package reflect;

/**
 * @Author Doris.Lee
 * @Description 反射机制工厂类
 * @Locate reflect.HeroFactory
 * @Datetime 2020-05-25 11:37
 * @Version 1.0
 */
public class HeroFactory {

    public static ISkill getHero(String name) throws  Exception{
        ISkill iSkill;

        //反射
        //元类：用来描述一个类（做框架的时候常用）
        //类：是对象的抽象
        //用forname必须是完整的包类名：reflect.hero.Diana
        String classStr = "reflect.hero."+name;
        Class<?> cla =Class.forName(classStr);//获取一个类的原类型
        Object obj = cla.newInstance();//java8之后已经废弃newInstance，新的如下
        //clazz.getDeclaredConstructor().newInstance()
        return (ISkill)obj;//强制转换

    }
}
